The present application relates to software development and more specifically to systems, methods, and patterns for implementing enterprise software applications.
Many types of business logic are implemented by enterprise software applications. For example, CRM applications often implement business logic to perform price quotations and order capture for customers. For the price quotation business logic, a pricing engine may be implemented to receive input data (e.g., product name or product ID) and to return output data that includes the price for each product in the input data. For the order capture business logic, an order capture engine and/or eligibility engine may be used to receive input data regarding a potential order (e.g., customer ID and product ID) and provide output data regarding the order capture or order eligibility.
A sales catalog comprises the set of data commonly accessed by a CRM system. The sales catalog includes information relating to the products offered for sale by the company, such as pricing information, product descriptions, product images, and the like. FIG. 2 provides an illustration of an example interface 200 that displays a list of product details that may be captured within a sales catalog. The sales catalog may be accessed, for example, by the business logic that is used to perform price quotations and order capture for customers.
There will be occasions when the sales catalog may need to be updated. For example, the sales catalog may need to be changed when a company needs to change pricing, revise product offerings, or change product descriptions for its offerings. Authoring, updating, and publication of a new version of the sales catalog can be a very iterative and time consuming process involving cooperation of multiple users. The problem is that until the changes have been finalized, the production users of the system should not normally be permitted to access the in-progress state of the sales catalog being modified. Otherwise, premature access to the in-progress data can lead to data inconsistencies, collisions, or conflicts. Therefore, careful orchestration of the editing and publishing processes is a complex task that needs careful coordination to avoid these types of problems. This is needed to ensure that while the publishing process is running (e.g., a long running asynchronous process), production users are prevented from making any modifications to the set of product groups that are being published.